{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Benchmark \n",
    "---\n",
    "\n",
    "This notebook compares the decoder performance between Viterbi Decoder and Neural Decoder [1] on Convolution Codes over AWGN Channel.\n",
    "\n",
    "Reference:\n",
    "* [1] Kim, Hyeji, et al. \"Communication Algorithms via Deep Learning.\" ICLR (2018)\n",
    "\n",
    "\n",
    "### TODOs:\n",
    "---\n",
    "\n",
    "* [x] Benchmark Viterbi Decoder \n",
    "* [x] Benchmark Neural Decoder\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os \n",
    "import pickle\n",
    "import numpy as np\n",
    "import commpy as cp\n",
    "import tensorflow as tf\n",
    "import multiprocessing as mp\n",
    "\n",
    "from deepcom.metrics import BER, BLER         # metrics to benchmark Neural Decoder Model\n",
    "from deepcom.utils import corrupt_signal      # simulate a AWGN Channel\n",
    "from deepcom.dataset import data_genenerator  # data loader for Tensorflow\n",
    "from deepcom.NeuralDecoder import NRSCDecoder # Neural Decoder Model\n",
    "\n",
    "BATCH_SIZE = 500       # depends on size of GPU, should be a factor of number_testing_sequences\n",
    "BLOCK_LEN = 100        # length of a message bits\n",
    "CONSTRAINT_LEN = 3     # num of shifts in Conv. Encoder\n",
    "TRACE_BACK_DEPTH = 15  # (?) a parameter Viterbi Encoder"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Load Dataset\n",
    "* Dataset should be generated using script `generate_synthetic_dataset.py`\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of testing sequences 10000\n"
     ]
    }
   ],
   "source": [
    "DATASET_PATH = 'rnn_120k_bl100_snr0.0.dataset'\n",
    "with open(DATASET_PATH, 'rb') as f:\n",
    "    _, _, X_test, Y_test = pickle.load(f)  # ignore training data\n",
    "print('Number of testing sequences {}'.format(len(X_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Load pre-trained Neural Decoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "./logs/BiGRU-2-400::dropout-0.7::epochs-50/BiGRU.hdf5\n",
      "Pre-trained model is loaded.\n"
     ]
    }
   ],
   "source": [
    "experiment_log = './logs/BiGRU-2-400::dropout-0.7::epochs-50'\n",
    "try:\n",
    "    model_path = os.path.join(experiment_log, 'BiGRU.hdf5')\n",
    "    print(model_path)\n",
    "    model = tf.keras.models.load_model(model_path, custom_objects={'BER': BER, 'BLER': BLER})\n",
    "    model.compile(optimizer='adam', loss='binary_crossentropy')\n",
    "    print('Pre-trained model is loaded.')\n",
    "except Exception as e:\n",
    "    print(e)\n",
    "    raise ValueError('Pre-trained model is not found.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Setup Viterbi/Neural Decoder Benchmarks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def benchmark_neural_decoder(noisy_inputs, labels):\n",
    "    Y = np.reshape(labels, (-1, BLOCK_LEN, 1))\n",
    "    X = np.reshape(np.array(noisy_inputs)[:, :2*BLOCK_LEN], (-1, BLOCK_LEN, 2))\n",
    "    test_set = data_genenerator(X, Y, BATCH_SIZE, shuffle=False)\n",
    "    decoded_bits = model.predict(\n",
    "        test_set.make_one_shot_iterator(), \n",
    "        steps=len(Y) // BATCH_SIZE)\n",
    "    original_bits = np.reshape(Y, (-1, BLOCK_LEN)).astype(int)\n",
    "    decoded_bits =  np.reshape(np.round(decoded_bits), (-1, BLOCK_LEN)).astype(int)\n",
    "    hamming_dist = np.not_equal(original_bits, decoded_bits)\n",
    "    return np.sum(hamming_dist, axis=1)\n",
    "\n",
    "def benchmark_viterbi(message_bits, noisy_bits, sigma):\n",
    "    # make fair comparison between (100, 204) convolutional code and RNN decoder\n",
    "    # Reference: Author's code\n",
    "    noisy_bits[-2*int(M):] = 0\n",
    "    # Viterbi Decoder on Conv. Code\n",
    "    decoded_bits = cp.channelcoding.viterbi_decode(\n",
    "        coded_bits=noisy_bits.astype(float), \n",
    "        trellis=trellis,\n",
    "        tb_depth=TRACE_BACK_DEPTH,\n",
    "        decoding_type='unquantized')\n",
    "    # Number of bit errors (hamming distance)\n",
    "    hamming_dist = cp.utilities.hamming_dist(\n",
    "        message_bits.astype(int),\n",
    "        decoded_bits[:-int(M)])\n",
    "    return hamming_dist\n",
    "\n",
    "\n",
    "from commpy.channelcoding import Trellis\n",
    "\n",
    "#  Generator Matrix (octal representation)\n",
    "G = np.array([[0o7, 0o5]]) \n",
    "M = np.array([CONSTRAINT_LEN - 1])  # Number of delay elements in the convolutional encoder\n",
    "trellis = Trellis(M, G, feedback=0o7, code_type='rsc')\n",
    "\n",
    "# #################################################################\n",
    "# For every SNR_db, we generates new noisy signals\n",
    "# for fair comparision.\n",
    "# #################################################################\n",
    "def generate_noisy_input(message_bits, trellis, sigma):\n",
    "    # Encode message bit\n",
    "    coded_bits = cp.channelcoding.conv_encode(message_bits, trellis)\n",
    "    # Corrupt message on BAWGN Channel\n",
    "    coded_bits = corrupt_signal(coded_bits, noise_type='awgn', sigma=sigma)\n",
    "    return coded_bits, message_bits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[SNR]=0.00\n",
      "\tNeural Decoder:  [BER]=0.0436794 [BLER]=0.978 \n",
      "\tViterbi Decoder: [BER]=0.0909850 [BLER]=0.957 \n",
      "[SNR]=1.00\n",
      "\tNeural Decoder:  [BER]=0.0237250 [BLER]=0.903 \n",
      "\tViterbi Decoder: [BER]=0.0468800 [BLER]=0.786 \n",
      "[SNR]=2.00\n",
      "\tNeural Decoder:  [BER]=0.0108539 [BLER]=0.656 \n",
      "\tViterbi Decoder: [BER]=0.0194360 [BLER]=0.471 \n",
      "[SNR]=3.00\n",
      "\tNeural Decoder:  [BER]=0.0036863 [BLER]=0.328 \n",
      "\tViterbi Decoder: [BER]=0.0059550 [BLER]=0.194 \n",
      "[SNR]=4.00\n",
      "\tNeural Decoder:  [BER]=0.0010123 [BLER]=0.114 \n",
      "\tViterbi Decoder: [BER]=0.0014120 [BLER]=0.054 \n",
      "[SNR]=5.00\n",
      "\tNeural Decoder:  [BER]=0.0002397 [BLER]=0.033 \n",
      "\tViterbi Decoder: [BER]=0.0002980 [BLER]=0.014 \n",
      "[SNR]=6.00\n",
      "\tNeural Decoder:  [BER]=0.0000466 [BLER]=0.008 \n",
      "\tViterbi Decoder: [BER]=0.0000320 [BLER]=0.003 \n",
      "[SNR]=7.00\n",
      "\tNeural Decoder:  [BER]=0.0000054 [BLER]=0.001 \n",
      "\tViterbi Decoder: [BER]=0.0000040 [BLER]=0.000 \n"
     ]
    }
   ],
   "source": [
    "viterbiBERs, viterbiBLERs = [], []\n",
    "neuralBERs, neuralBLERs = [], []\n",
    "\n",
    "pool = mp.Pool(processes=mp.cpu_count())\n",
    "labels = np.reshape(Y_test, (-1, BLOCK_LEN)).astype(int)\n",
    "try: \n",
    "    SNRs  = np.linspace(0, 7.0, 8)\n",
    "    for snr in SNRs:\n",
    "        snr_linear = snr + 10 * np.log10(1./2.)\n",
    "        sigma = np.sqrt(1. / (2. * 10 **(snr_linear / 10.)))\n",
    "        print('[SNR]={:.2f}'.format(snr))\n",
    "        \n",
    "        # Generates new noisy signals\n",
    "        result = pool.starmap(generate_noisy_input,  [(msg_bits, trellis, sigma) for msg_bits in labels])\n",
    "        X, Y =  zip(*result)\n",
    "        \n",
    "        # #################################################################\n",
    "        # BENCHMARK NEURAL DECODER \n",
    "        # #################################################################\n",
    "        hamm_dists = benchmark_neural_decoder(X, Y)\n",
    "        nn_ber = sum(hamm_dists) / np.product(np.shape(X))\n",
    "        nn_bler = np.count_nonzero(hamm_dists) / len(X)\n",
    "\n",
    "        neuralBERs.append(nn_ber)\n",
    "        neuralBLERs.append(nn_bler)            \n",
    "        print('\\tNeural Decoder:  [BER]={:5.7f} [BLER]={:5.3f} '.format(nn_ber, nn_bler)) \n",
    "\n",
    "        # #################################################################\n",
    "        # BENCHMARK VITERBI DECODER \n",
    "        # #################################################################\n",
    "        hamm_dists = pool.starmap(benchmark_viterbi, [(y, x, sigma) for x, y in zip(X, Y)])\n",
    "        # Bit error rate\n",
    "        ber = sum(hamm_dists) / np.product(np.shape(Y))\n",
    "        # Block error rate\n",
    "        bler = np.count_nonzero(hamm_dists) / len(Y)\n",
    "        viterbiBERs.append(ber)\n",
    "        viterbiBLERs.append(bler)\n",
    "        print('\\tViterbi Decoder: [BER]={:5.7f} [BLER]={:5.3f} '.format(ber, bler)) \n",
    "        \n",
    "except Exception as e:\n",
    "    print(e)\n",
    "finally:\n",
    "    pool.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "plt.figure(figsize=(12, 10))\n",
    "plt.semilogy(SNRs, viterbiBERs, '-s')\n",
    "plt.semilogy(SNRs, neuralBERs, '-v')\n",
    "plt.title('N = 10,000 || Block Length = 100 || Data rate = 1/2', fontsize=14)\n",
    "plt.legend(['Viterbi', 'Neural Decoder(SNR_train=0 dB)'], fontsize=16)\n",
    "plt.xlabel('SNR', fontsize=16)\n",
    "plt.xlim(xmin=SNRs[0], xmax=SNRs[-1])  # this line\n",
    "plt.ylabel('BER', fontsize=16)\n",
    "plt.grid(True, which='both')\n",
    "plt.savefig('result.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
